package com.mar.tech.unify.service.database;

import io.vertx.codegen.annotations.Fluent;
import io.vertx.codegen.annotations.GenIgnore;
import io.vertx.codegen.annotations.ProxyGen;
import io.vertx.codegen.annotations.VertxGen;
import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.core.eventbus.DeliveryOptions;
import io.vertx.core.json.JsonArray;
import io.vertx.mysqlclient.MySQLPool;

/**
 * Description: 数据库操作 .<br>
 *
 * @author m-xy
 *     Created By 2019/12/3 18:27
 */
@ProxyGen @VertxGen public interface DatabaseService {
  /**
   * 创建.
   *
   * @param jdbcClient   数据库连接
   * @param readyHandler 回调
   * @return 链路
   */
  @GenIgnore
  static DatabaseService create(MySQLPool jdbcClient, Handler<AsyncResult<DatabaseService>> readyHandler) {
    return new DatabaseServiceImpl(jdbcClient, readyHandler);
  }

  /**
   * 代理.
   *
   * @param vertx   实体
   * @param address 地址
   * @return 链路
   */
  @GenIgnore
  static DatabaseService createProxy(Vertx vertx, String address) {
    return new DatabaseServiceVertxEBProxy(vertx, address);
  }

  /**
   * 代理.
   *
   * @param vertx   实体
   * @param address 地址
   * @param options 参数
   * @return 链路
   */
  @GenIgnore
  static DatabaseService createProxy(Vertx vertx, String address, DeliveryOptions options) {
    return new DatabaseServiceVertxEBProxy(vertx, address, options);
  }

  /**
   * 查询.
   *
   * @param sql           查询SQL
   * @param param         参数
   * @param resultHandler 回调句柄
   * @return 链路
   */
  @Fluent
  DatabaseService query(String sql, JsonArray param, Handler<AsyncResult<JsonArray>> resultHandler);
}
